package com.tamplus.cs.bean;

import java.io.File;
import java.io.FileInputStream;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;

import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import org.apache.commons.beanutils.BeanUtils;

import com.tamplus.cs.constant.Constant;
import com.tamplus.cs.constant.MessageConstant;
import com.tamplus.cs.model.CheckupPackage;
import com.tamplus.cs.model.Patient;
import com.tamplus.cs.service.CallService;
import com.tamplus.cs.util.BusinessUtils;
import com.tamplus.cs.util.StringUtils;

public class PackageBean extends BaseBean implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	private String hn;
	private String hnFlag;
	private String checkupFlag;
	private String freezeFlag;
	
	private String id;
	private String contactId;
	
	private String title;
	private String name;
	private String surname;
	private Date birthDate;
	
	//for show
	private Boolean option00;
	
	private String option01;
	private String option02;
	private String option03;
	private String option04;
	private String option05;
	private String option06;
	private String option07;
	private String option08;
	private String option09;
	private String option10;
	private String option11;
	private String option12;
	private String option13;
	private String option14;
	private String option15;
	private String option16;
	private String option17;
	private String option18;
	private String option19;
	private String option20;
	private String option21;
	private String option22;
	private String option23;
	private String option24;
	private String option25;
	private String option26;
	private String option27;
	private String option28;
	private String option29;
	private String option30;
	private String option31;
	
	private String option04_1;
	private String option15_1;
	private String option16_1;
	private String option17_1;

	private String riskFactorSummary;
	
	private Patient patient;
	
	private Map<String, Boolean> checked 	= new LinkedHashMap<String, Boolean>();
	private Map<String, String> remarks 	= new LinkedHashMap<String, String>();
	
	private String otherDescription;
	private String otherIndication;
	private double otherPrice;
	private String otherRemark;
	
	public PackageBean() {
	}

	/**
	 * Clear data in bean
	 */
	private void clear() {
		id 					= "";
		title 				= "";
		name 				= "";
		surname 			= "";
		birthDate 			= null;
		riskFactorSummary 	= "";	
		option00 			= true;
	}
	
	public static void main(String[] args){
		Calendar c1 = Calendar.getInstance(Locale.US);
		c1.set(Calendar.DATE, 22);
		c1.set(Calendar.MONTH, 11);
		c1.set(Calendar.YEAR, 2011);
		Date date = c1.getTime();
		Date nowDate = new Date();
		System.out.println("Date 1 : "+date);
		System.out.println("Date 2 : "+nowDate);
		System.out.println("Compare Date : "+date.compareTo(nowDate));
	}

	public void changeBirthDate(ValueChangeEvent event) {
		System.out.println("Start changeBirthDate...");
		try{
			System.out.println("bod : "+event.getNewValue().toString());

			Date birthDate = (Date)event.getNewValue();
			//call calculate age
			patient.setAge(BusinessUtils.calculateAge(birthDate));
		}catch(Exception e){
			e.printStackTrace();
			patient.setBirthDate(null);
			patient.setAge("");
		}
		System.out.println("End changeBirthDate...");
	}	
	
	public void selectPackage(){
		if(patient != null){
			double totalPrice = 0.00d;
			for(CheckupPackage package1 : patient.getPackageList()){
				for(Entry<String,Boolean> entry : checked.entrySet() ){
					if(package1.getId().equalsIgnoreCase(entry.getKey()) && entry.getValue()){
						System.out.println("key : "+entry.getKey() + " value : "+entry.getValue());
						if("Y".equalsIgnoreCase(package1.getOtherFlag())){
							totalPrice += otherPrice;
						}else{
							totalPrice += package1.getPrice();
						}
//						package1.setSelect("Y");
//						checked.put(package1.getId(), true);
					} else if(package1.getId().equalsIgnoreCase(entry.getKey()) && !entry.getValue()){
						System.out.println("key : "+entry.getKey() + " value : "+entry.getValue());
//						package1.setSelect("N");
//						checked.put(package1.getId(), false);
//						if("Y".equals(package1.getSelect())){
							if("Y".equalsIgnoreCase(package1.getOtherFlag())){
								otherRemark = "";
							}else{
								remarks.put(package1.getId(), "");
							}
							package1.setRemark("");
//						}
					}
				}	
			}
			patient.setTotalPrice(totalPrice);
		}
	}	
	/**
	 * Clear session of search
	 */
	private void clearBean() {
		FacesContext context = FacesContext.getCurrentInstance();
		System.out.println("Clear Session Success!!");
		if (context.getExternalContext().getSessionMap().containsKey("searchBean")) {
			context.getExternalContext().getSessionMap().remove("searchBean");
		}
	}

	/**
	 * Prepare for create
	 * 
	 * @return
	 */
	public String prepareCreate() {
		clear();
		try {
			//call web service for map data package
			//send model to create/update
			if(hnFlag != null && "Y".equals(hnFlag)){
				CallService service = new CallService();
				patient = service.getContract(hn);
			}else{
				patient = new Patient();
			}
			patient.setHn(hn);
			patient.setHnFlag(hnFlag);
			patient.setCheckupFlag(checkupFlag);
			patient.setContactId(contactId);
			patient.setVisitDate(new Date());
			
			clearBean();
			
			displayInfoMessage(MessageConstant.GET_CONTRACT_SUCCESS, new String[] { hn });

			return "prepare";
		} catch (Exception e) {
			setErrorMessage(e.getMessage());
		}

		return "";
		
	}

	/**
	 * Preview before create new fund
	 * 
	 * @return
	 */
	public String previewCreate() {
		//called from form_analyze_package.xhtml
		//map field from UI
		System.out.println("Start previewCreate...");
		
		try {
			System.out.println("patient bean : "+BeanUtils.describe(patient));	

			CallService service = new CallService();
			
			//call web service for add contract
			if(hnFlag != null && "N".equals(hnFlag)){
				service.addContract(patient);
			}

			//call web service for save answer survey
			//initial data before save
			service.recommend(patient, option01, option02, option03, option04, option05, option06, option07, option08, option09, option10, option11, option12, option13, option14, option15, option16, option17, option18, option19, option20, option21, option22, option23, option24, option25, option26, option27, option28, option29, option30, option31, option04_1, option15_1, option16_1, option17_1);
			
			//map output
			contactId = patient.getContactId();
			String answerId = patient.getAnswerId();
			id = answerId;
			patient = service.getPackageResult(answerId, true);
			patient.setId(answerId);
			patient.setContactId(contactId);
			
			//check freeze flag
			//status = Estimate, visitDate = sysDate
			//check freeze
			freezeFlag = "Y";
			if(Constant.STATUS_ESTIMATE.equalsIgnoreCase(patient.getStatus())){
//				Calendar cNow = Calendar.getInstance(Locale.US);				
//				if(visitDate.compareTo(cNow.getTime()) == 0){
					freezeFlag = "N";
//				}
			}
			
			//initial checked
			for(CheckupPackage package1 : patient.getPackageList()){
		//System.out.println(" - Checked " + package1.getId() + " = " + package1.getSelect());
				
				//default select from ws
				if("Y".equalsIgnoreCase(package1.getSelect())){
					checked.put(package1.getId(), true);
				} else{
					checked.put(package1.getId(), false);
				}
				
				if("Y".equalsIgnoreCase(package1.getOtherFlag())){
					otherDescription 	= package1.getDescription();
					otherPrice 			= package1.getPrice();
					otherRemark 		= package1.getRemark();
				}				
			}
			
			displayInfoMessage(MessageConstant.SEARCH_PACKAGE_SUCCESS, new String[] { patient.getHn() });

			return FWD_PREVIEW;
		} catch (Exception e) {
			setErrorMessage(e.getMessage());
		}
		System.out.println("End previewCreate...");
		return "";
	}

	/**
	 * Prepare data for edit
	 * 
	 * @return
	 */
	public String prepareEdit() {
		try {
			//call web service for map data package
			//send model to update
			CallService service = new CallService();
			patient = service.getPackageResult(""+id);
			patient.setId(id);
			patient.setContactId(contactId);
			title 	= patient.getTitle();
			name 	= patient.getName();
			surname = patient.getSurname();			
			riskFactorSummary = patient.getRiskFactory();
			
			//check freeze flag
			//status = Estimate, visitDate = sysDate
			freezeFlag = "Y";
			if(Constant.STATUS_ESTIMATE.equalsIgnoreCase(patient.getStatus())){
//				Calendar cNow = Calendar.getInstance(Locale.US);				
//				if(visitDate.compareTo(cNow.getTime()) == 0){
					freezeFlag = "N";
//				}
			}
			//initial remarks
			for(CheckupPackage package1 : patient.getPackageList()){
				//System.out.println(" - Checked " + package1.getId() + " = " + package1.getSelect());
				if("Y".equalsIgnoreCase(package1.getSelect())){
					checked.put(package1.getId(), true);
				} else{
					checked.put(package1.getId(), false);
				}
				remarks.put(package1.getId(), package1.getRemark());
				
				if("Y".equalsIgnoreCase(package1.getOtherFlag())){
					otherDescription 	= package1.getDescription();
					otherPrice 			= package1.getPrice();
					otherRemark 		= package1.getRemark();
				}
			}
			
			clearBean();
			
			displayInfoMessage(MessageConstant.SEARCH_PACKAGE_SUCCESS, new String[] { patient.getHn() });

			return "prepare";
		} catch (Exception e) {
			e.printStackTrace();
			setErrorMessage(e.getMessage());
		}
		return "";
	}

	/**
	 * Cancel
	 * 
	 * @return
	 */
	public String cancel() {
		try{
			//call web service for cancel
			//may be use 2 page for back page
			CallService service = new CallService();
			service.updateAnswer(patient, Constant.STATUS_CANCEL);
			
			//initial after buy/cancel/print
			String id = patient.getId();
			contactId = patient.getContactId();
			patient = service.getPackageResult(patient.getId());
			patient.setId(id);
			patient.setContactId(contactId);

			freezeFlag = "Y";
			
			displayInfoMessage(MessageConstant.CANCEL_SUCCESS, new String[] { patient.getHn() });
	
			return FWD_CANCEL;
		} catch (Exception e) {
			setErrorMessage(e.getMessage());
		}
		return "";
	}

	public String close() {
		return FWD_CLOSE;
	}

	/**
	 * 
	 * @return
	 */
	public String back() {
		return FWD_BACK;
	}

	/**
	 * Buy
	 * 
	 * @return
	 */
	public String create() {
		try {
			//called from form_analyze_result.xhtml
			
			//call web service for buy
			//create model
			CallService service = new CallService();
			
			//map input
			service.updateAnswer(patient, Constant.STATUS_BUY);

			//map input
			List<CheckupPackage> list = patient.getPackageList();
			for(CheckupPackage cPackage : list){
				System.out.print("\nchecked obj0 : "+checked);
				System.out.print("\nchecked obj1 : "+BeanUtils.describe(checked));
				System.out.print("\nchoose: "+cPackage.getId());
				if(checked.get(cPackage.getId())) {
					System.out.println("\n* Is checked, select : " + cPackage.getSelect() + ", remark : " + remarks.get(cPackage.getId()));
					//service.updateProduct(patient, cPackage.getId(), cPackage.getSelect(), ""+cPackage.getPrice(), cPackage.getIndication(), remarks.get(cPackage.getId()));
					String strSelect = "Y"; //.equalsIgnoreCase(cPackage.getSelect())?"Y":"N";
					if("Y".equalsIgnoreCase(cPackage.getOtherFlag())){
						service.updateProduct(patient, cPackage.getId(), strSelect, ""+otherPrice, StringUtils.toString(otherIndication), StringUtils.toString(otherRemark));
					}else{
						service.updateProduct(patient, cPackage.getId(), strSelect, ""+cPackage.getPrice(), cPackage.getIndication(), StringUtils.toString(remarks.get(cPackage.getId()))+" ");
					}
				} else{
					if("Y".equalsIgnoreCase(cPackage.getSelect())){
						if("Y".equalsIgnoreCase(cPackage.getOtherFlag())){
							service.updateProduct(patient, cPackage.getId(), "N", ""+otherPrice, StringUtils.toString(otherIndication), StringUtils.toString(otherRemark));
						}else{
							service.updateProduct(patient, cPackage.getId(), "N", ""+cPackage.getPrice(), cPackage.getIndication(), StringUtils.toString(remarks.get(cPackage.getId()))+" ");
						}
					}
				}
			}
			
			//initial after buy/cancel/print
			String id = patient.getId();
			contactId = patient.getContactId();
			patient = service.getPackageResult(patient.getId());
			patient.setId(id);
			patient.setContactId(contactId);
			
			freezeFlag = "Y";
			
			displayInfoMessage(MessageConstant.BUY_SUCCESS, new String[] { patient.getHn() });
			
			return FWD_CREATE;
		} catch(Exception e) {
			e.printStackTrace();
//			displayErrorMessage(e.getMessage(), new String[] { patient.getHn() });			
			setErrorMessage(e.getMessage());
		}

		return "";
	}

	public String print() throws Exception {
		System.out.println("Start print...");
		try{
			//call web service for print
			//create model
			CallService service = new CallService();
			//map input
			System.out.println("[print-updateAnswer] status : " + patient.getStatus());
			service.updateAnswer(patient, patient.getStatus());	// "Estimate"
			
			//map input
			List<CheckupPackage> list = patient.getPackageList();
			System.out.println("checked obj0 : "+checked);
			for(CheckupPackage cPackage : list){
				System.out.print("choose: "+cPackage.getId());
				if(checked.get(cPackage.getId())) {
					System.out.println("\n - Is checked, select : " + cPackage.getSelect() + ", remark : [" + remarks.get(cPackage.getId()) + "," + cPackage.getRemark() + "]");
					cPackage.setSelect("Y");
					if(remarks.get(cPackage.getId()) != null){
						cPackage.setRemark(remarks.get(cPackage.getId()));
					} else{
						cPackage.setRemark(" ");
					}
					//service.updateProduct(patient, cPackage.getId(), cPackage.getSelect(), ""+cPackage.getPrice(), cPackage.getIndication(), remarks.get(cPackage.getId()));
					String strSelect = "Y".equalsIgnoreCase(cPackage.getSelect())?"Y":"N";
					if("Y".equalsIgnoreCase(cPackage.getOtherFlag())){
						service.updateProduct(patient, cPackage.getId(), strSelect, ""+otherPrice, StringUtils.toString(otherIndication), StringUtils.toString(otherRemark));
					} else{
						service.updateProduct(patient, cPackage.getId(), strSelect, ""+cPackage.getPrice(), cPackage.getIndication(), StringUtils.toString(remarks.get(cPackage.getId()))+" ");
					}
				} else{
					if("Y".equalsIgnoreCase(cPackage.getSelect())){
						if("Y".equalsIgnoreCase(cPackage.getOtherFlag())){
							service.updateProduct(patient, cPackage.getId(), "N", ""+otherPrice, StringUtils.toString(otherIndication), StringUtils.toString(otherRemark));
						} else{
							service.updateProduct(patient, cPackage.getId(), "N", ""+cPackage.getPrice(), cPackage.getIndication(), StringUtils.toString(remarks.get(cPackage.getId()))+" ");
						}
					}
				}
			}
			
			//initial after buy/cancel/print
			String id = patient.getId();
			contactId = patient.getContactId();
			patient = service.getPackageResult(patient.getId());
			patient.setId(id);
			patient.setContactId(contactId);

			System.out.println("print input : "+BeanUtils.describe(patient));
			
			//call report
			// Fill Map with parameter values
			HashMap<String, Object> hm = new HashMap<String, Object>();
			hm.put("hn", patient.getHn());
			hm.put("gender", patient.getGender());
			hm.put("vitalSign", patient.getSYS() + "/" + patient.getDIA() + "/" + patient.getHeart());
			hm.put("patientName", patient.getName());
			hm.put("birthDate", patient.getDOB());
			hm.put("year", patient.getAge());
			hm.put("month", "");
			hm.put("weight", patient.getWeight());
			hm.put("stature", patient.getHeight());
			hm.put("bmi", patient.getBMI());
			hm.put("status", patient.getStatus());
			hm.put("visitDate", patient.getVisitDate());
			hm.put("summary", patient.getRiskFactory());
			hm.put("remark", patient.getNote());
			
			//Fix for test
	//		ArrayList<CheckupPackage> resultList = new ArrayList<CheckupPackage>();
	//		CheckupPackage package1 = new CheckupPackage();
	//		package1.setPackageName("Package Name1");
	//		package1.setDescription("description 1");
	//		package1.setIndication("indication 1");
	//		package1.setPrice(500);
	//		package1.setRemark("no remark");
	//		resultList.add(package1);
	//		package1 = new CheckupPackage();
	//		package1.setPackageName("Package Name2");
	//		package1.setDescription("description 2");
	//		package1.setIndication("indication 2");
	//		package1.setPrice(1500);
	//		package1.setRemark("no remark 2");
	//		resultList.add(package1);
	
			ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
			String path = servletContext.getRealPath("/") + "/WEB-INF/reports/PackageResultReport.jasper";  
			File file = new File(path);
			JasperPrint jasperPrint = JasperFillManager.fillReport(
					new FileInputStream(file), hm, new JRBeanCollectionDataSource(patient.getPackageList()));
	
			byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
			FacesContext context = FacesContext.getCurrentInstance();
			HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
	
			response.addHeader("Content-disposition", "attachment;filename=PackageResultReport.pdf");
			response.setContentLength(bytes.length);
			response.getOutputStream().write(bytes);
			response.setContentType("application/pdf");
			context.responseComplete();
			
			displayInfoMessage(MessageConstant.PRINT_SUCCESS, new String[] { patient.getHn() });
		} catch(Exception e) {
			e.printStackTrace();
			setErrorMessage(e.getMessage());
		}
		System.out.println("End print...");
		
		return null;
	}
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSurname() {
		return surname;
	}

	public void setSurname(String surname) {
		this.surname = surname;
	}

	public Date getBirthDate() {
		return birthDate;
	}

	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}

	public String getOption01() {
		return option01;
	}

	public void setOption01(String option01) {
		this.option01 = option01;
	}

	public String getOption02() {
		return option02;
	}

	public void setOption02(String option02) {
		this.option02 = option02;
	}

	public String getOption03() {
		return option03;
	}

	public void setOption03(String option03) {
		this.option03 = option03;
	}

	public String getOption04() {
		return option04;
	}

	public void setOption04(String option04) {
		this.option04 = option04;
	}

	public String getOption05() {
		return option05;
	}

	public void setOption05(String option05) {
		this.option05 = option05;
	}

	public String getOption06() {
		return option06;
	}

	public void setOption06(String option06) {
		this.option06 = option06;
	}

	public String getOption07() {
		return option07;
	}

	public void setOption07(String option07) {
		this.option07 = option07;
	}

	public String getOption08() {
		return option08;
	}

	public void setOption08(String option08) {
		this.option08 = option08;
	}

	public String getOption09() {
		return option09;
	}

	public void setOption09(String option09) {
		this.option09 = option09;
	}

	public String getOption10() {
		return option10;
	}

	public void setOption10(String option10) {
		this.option10 = option10;
	}

	public String getOption11() {
		return option11;
	}

	public void setOption11(String option11) {
		this.option11 = option11;
	}

	public String getOption12() {
		return option12;
	}

	public void setOption12(String option12) {
		this.option12 = option12;
	}

	public String getOption13() {
		return option13;
	}

	public void setOption13(String option13) {
		this.option13 = option13;
	}

	public String getOption14() {
		return option14;
	}

	public void setOption14(String option14) {
		this.option14 = option14;
	}

	public String getOption15() {
		return option15;
	}

	public void setOption15(String option15) {
		this.option15 = option15;
	}

	public String getOption16() {
		return option16;
	}

	public void setOption16(String option16) {
		this.option16 = option16;
	}

	public String getOption17() {
		return option17;
	}

	public void setOption17(String option17) {
		this.option17 = option17;
	}

	public String getOption18() {
		return option18;
	}

	public void setOption18(String option18) {
		this.option18 = option18;
	}

	public String getOption19() {
		return option19;
	}

	public void setOption19(String option19) {
		this.option19 = option19;
	}

	public String getOption20() {
		return option20;
	}

	public void setOption20(String option20) {
		this.option20 = option20;
	}

	public String getOption21() {
		return option21;
	}

	public void setOption21(String option21) {
		this.option21 = option21;
	}

	public String getOption15_1() {
		return option15_1;
	}

	public void setOption15_1(String option15_1) {
		this.option15_1 = option15_1;
	}

	public String getOption16_1() {
		return option16_1;
	}

	public void setOption16_1(String option16_1) {
		this.option16_1 = option16_1;
	}

	public String getOption17_1() {
		return option17_1;
	}

	public void setOption17_1(String option17_1) {
		this.option17_1 = option17_1;
	}

	public String getOption22() {
		return option22;
	}

	public void setOption22(String option22) {
		this.option22 = option22;
	}

	public String getOption23() {
		return option23;
	}

	public void setOption23(String option23) {
		this.option23 = option23;
	}

	public String getOption24() {
		return option24;
	}

	public void setOption24(String option24) {
		this.option24 = option24;
	}

	public String getOption25() {
		return option25;
	}

	public void setOption25(String option25) {
		this.option25 = option25;
	}

	public String getOption26() {
		return option26;
	}

	public void setOption26(String option26) {
		this.option26 = option26;
	}

	public String getOption27() {
		return option27;
	}

	public void setOption27(String option27) {
		this.option27 = option27;
	}

	public String getOption28() {
		return option28;
	}

	public void setOption28(String option28) {
		this.option28 = option28;
	}

	public String getOption29() {
		return option29;
	}

	public void setOption29(String option29) {
		this.option29 = option29;
	}

	public String getOption04_1() {
		return option04_1;
	}

	public void setOption04_1(String option04_1) {
		this.option04_1 = option04_1;
	}

	public String getRiskFactorSummary() {
		return riskFactorSummary;
	}

	public void setRiskFactorSummary(String riskFactorSummary) {
		this.riskFactorSummary = riskFactorSummary;
	}

	public String getFreezeFlag() {
		return freezeFlag;
	}

	public void setFreezeFlag(String freezeFlag) {
		this.freezeFlag = freezeFlag;
	}

	public Patient getPatient() {
//		if(patient == null) patient = new Patient();
		return patient;
	}

	public void setPatient(Patient patient) {
		this.patient = patient;
	}

	public String getHn() {
		return hn;
	}

	public void setHn(String hn) {
		this.hn = hn;
	}

	public String getHnFlag() {
		return hnFlag;
	}

	public void setHnFlag(String hnFlag) {
		this.hnFlag = hnFlag;
	}

	public String getCheckupFlag() {
		return checkupFlag;
	}

	public void setCheckupFlag(String checkupFlag) {
		this.checkupFlag = checkupFlag;
	}

	public String getOption30() {
		return option30;
	}

	public void setOption30(String option30) {
		this.option30 = option30;
	}

	public String getOption31() {
		return option31;
	}

	public void setOption31(String option31) {
		this.option31 = option31;
	}

	public Map<String, Boolean> getChecked() {
		return checked;
	}

	public void setChecked(Map<String, Boolean> checked) {
		this.checked = checked;
	}

	public String getContactId() {
		return contactId;
	}

	public void setContactId(String contactId) {
		this.contactId = contactId;
	}

	public String getOtherDescription() {
		return otherDescription;
	}

	public void setOtherDescription(String otherDescription) {
		this.otherDescription = otherDescription;
	}

	public String getOtherIndication() {
		return otherIndication;
	}

	public void setOtherIndication(String otherIndication) {
		this.otherIndication = otherIndication;
	}

	public double getOtherPrice() {
		return otherPrice;
	}

	public void setOtherPrice(double otherPrice) {
		this.otherPrice = otherPrice;
	}

	public String getOtherRemark() {
		return otherRemark;
	}

	public void setOtherRemark(String otherRemark) {
		this.otherRemark = otherRemark;
	}

	public void setRemarks(Map<String, String> remarks) {
		this.remarks = remarks;
	}

	public Map<String, String> getRemarks() {
		return remarks;
	}

	public Boolean getOption00() {
		return option00;
	}

	public void setOption00(Boolean option00) {
		this.option00 = option00;
	}

}
